package com.dubbo.service.impl;

import com.dubbo.common.ResponseUtil;
import com.dubbo.common.check.CheckUtil;
import com.dubbo.common.page.PageResponse;
import com.dubbo.common.page.PageUtils;
import com.dubbo.domain.Category;
import com.dubbo.domain.info.ResultMessage;
import com.dubbo.mapper.CategoryMapper;
import com.dubbo.service.business.category.CategoryService;
import com.dubbo.service.impl.base.BaseServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.io.IOException;
import java.util.List;
import java.util.Map;


/**
 * 分类ServiceImpl
 * 
 * @author wujunyuan
 * @date 2018年12月14日 上午11:09:57
 */
@Service
@Transactional(readOnly = false, rollbackFor = Exception.class)
public class CategoryServiceImpl extends BaseServiceImpl<Category> implements CategoryService {

	@Autowired
	private CategoryMapper categoryMapper;

	@Value("${fastdfsUrl}")
	private String fastdfsUrl;
	
	
	/**
	 * 获取一级列表
	 * 
	 * @author wujunyuan
	 * @date 2018年12月29日 下午5:11:57
	 * @param pageStart
	 * @param pageTotal
	 * @return
	 */
	@Override
	public Map<String, Object> findParentList(Long pageStart, Long pageTotal) {
		// 初始化
		pageStart = PageUtils.initialPageStart(pageStart);
		pageTotal = PageUtils.packagePageTotal(pageTotal, 5, 10);
		// 获取一级列表总记录数
		Long pageCount = categoryMapper.findCategoryCount();
		// 获取一级列表
		List<Map<String, Object>> parentList = categoryMapper
				.findCategoryParentList(PageUtils.countPageStart(pageStart, pageTotal), pageTotal);
		return ResponseUtil.ajaxCheckSuccess(ResultMessage.OK,
				new PageResponse(pageStart, pageTotal, pageCount, parentList));
	}

	/**
	 * 获取二级列表
	 * @author wujunyuan
	 * @date 2018年12月29日 下午5:20:45
	 * @param pageStart
	 * @param pageTotal
	 * @param parentId
	 * @return
	 */
	@Override
	public Map<String, Object> findSecondList(Long pageStart, Long pageTotal, Long parentId) {
		if(parentId==null) {
			return ResponseUtil.ajaxCheckError(ResultMessage.PARAMETER_ERROR,"parentId is null");
		}
		// 初始化
		pageStart = PageUtils.initialPageStart(pageStart);
		pageTotal = PageUtils.packagePageTotal(pageTotal, 5, 10);
		// 获取二级列表总记录数
		Long pageCount = categoryMapper.findSecondListCount(parentId);
		// 根据一级系列id获取二级系列
		List<Map<String, Object>> secList = categoryMapper.findCategorySecList(parentId,
				PageUtils.countPageStart(pageStart, pageTotal), pageTotal);
		if (secList != null && !secList.isEmpty()) {
			for (Map<String, Object> map : secList) {
				// 处理图片路径
				Object picture = map.get("picUrl");
				if (picture != null && StringUtils.isNotBlank(picture.toString())) {
					map.put("picUrl", this.getPic(picture.toString()));
				}
			}
		}
		return ResponseUtil.ajaxCheckSuccess(ResultMessage.OK,
				new PageResponse(pageStart, pageTotal, pageCount, secList));
	}
	
	/**
	 * 拼接图片域名
	 * 
	 * @author gujiahua 2018年11月28日 上午11:28:03
	 * @param pic
	 * @return
	 */
	private String getPic(String pic) {
		if (!CheckUtil.checkUrl(pic)) {
			pic = fastdfsUrl + pic;
		}
		return pic;
	}

	/**
	 * 获取系列详情
	 * 
	 * @author wujunyuan
	 * @date 2018年12月15日 上午9:38:37
	 * @param categoryId
	 *            系列id
	 * @return
	 * @throws IOException 
	 */
	@Override
	public Map<String, Object> findCategorydeDails(Long categoryId) throws IOException {
		// 校验参数
		if (categoryId == null) {
			return ResponseUtil.ajaxCheckError(ResultMessage.PARAMETER_NULL, "categoryId is null");
		}
		// 获取系列详情
		Map<String, Object> result = categoryMapper.findCategorydeDails(categoryId);
		// 处理图片
//		if (result != null && !result.isEmpty()) {
//			for (Map<String, Object> map : result) {
//				Object url = map.get("url");
//				if (url != null && StringUtils.isNotBlank(url.toString())) {
//					map.put("url", this.getPic(url.toString()));
//					//设置图片宽高
//					putPicWidthAndHeight(map,map.get("url").toString());
//				}
//			}
//		}
		return ResponseUtil.ajaxCheckSuccess(ResultMessage.OK, result);
	}

	/**
	 * 设置图片的长度与高度
	 * @author chenluqiang
	 * @date 2019年1月2日 上午10:23:30 
	 * @param urlStr
	 * @throws IOException
	 */
	/*private void putPicWidthAndHeight(Map<String,Object> map,String urlStr) throws IOException {
		try {
			URL url = new URL(urlStr);
		     URLConnection connection = url.openConnection();
		     connection.setDoOutput(true);
		     BufferedImage image = ImageIO.read(connection.getInputStream());  
		     int srcWidth = image .getWidth();      // 源图宽度
		     int srcHeight = image .getHeight();    // 源图高度
		     map.put("srcWidth", srcWidth);
		     map.put("srcHeight", srcHeight);
		}catch (FileNotFoundException e) {
			 map.put("srcWidth","0px");
		     map.put("srcHeight","0px");
		}
	}*/

}
